﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Collections;

namespace GIFT
{
    public partial class ventanaAbrir : Form
    {
        //Recibe la referencia de la ventana desde la que fue llamada
        public ventanaAbrir(InterfazPrincipal ventanaPadre)
        {
            Principal = ventanaPadre;//guarda la ventana que la llamo
            InitializeComponent();
            LlenarTreeView();//llena los campos del arbol
        }

        //Llena el treeview con los nombres de los tipos de campo existentes
        public void LlenarTreeView()
        {
            treeViewAbrir.BeginUpdate();
            string[] Componentes = { "tipoCampo", "formulario", "comando", "actividad", "flujoTrabajo" };
            TreeNodeCollection component = treeViewAbrir.Nodes[0].Nodes;
            for (int i = 0; i < component.Count; ++i)
            {
                treeViewAbrir.SelectedNode = component[i];
                AgregaNodosComponentes(Componentes[i]);
            }
            treeViewAbrir.EndUpdate();
            treeViewAbrir.Refresh();
        }


        //Agrega nodos al arbol principal del form
        private void AgregaNodosComponentes(string componente)
        {
            if (componente == "tipoCampo")
            {
                string[] TiposCampo = { "numero", "binario", "incremental", "texto", "fechaHora", "jerarquia", "lista" };
                TreeNodeCollection tCampo = Principal.GetTreeView().Nodes[0].Nodes[0].Nodes;
                for (int i = 0; i < tCampo.Count; ++i)
                {
                    Principal.GetTreeView().SelectedNode = tCampo[i];
                    agregarInstanciasComponentes(TiposCampo[i]);
                }
            }
            else
            {
                agregarInstanciasComponentes(componente);
            }
        }

        //Agrega nodos con los nombres de las instancias de los componentes
        private void agregarInstanciasComponentes(string instancia)
        {
            ArrayList campos = Principal.GetControlInterfaz().obtenerListaCampos(instancia);
            for (int i = 0; i < campos.Count; ++i)
            {
                TreeNode tnode = new TreeNode(campos[i].ToString());
                treeViewAbrir.SelectedNode.Nodes.Add(tnode);
            }
        }

        //Cierra la ventana
        private void botonCancelar_Click(object sender, EventArgs e)
        {
            this.Close();//se cierra la ventana
        }

        //Captura el evento del boton abrir
        private void botonAbrir_Click(object sender, EventArgs e)
        {
            abrirArchivo();//manda a abrir el archivo
        }

        //Manda a abrir el archivo
        private void abrirArchivo ()
        {
            String nodo = treeViewAbrir.SelectedNode.Text;//saca el nombre del nodo apuntado
            if (!Principal.estaAbierta(nodo))
            {
                if (nodo != "Tipo de Campo" && nodo != "Número" &&
                nodo != "Binario" && nodo != "Incremental" &&
                nodo != "FechaHora" && nodo != "Texto"
                && nodo != "Jerarquia" && nodo != "Lista")//controla que no sea el padre
                {
                    Principal.abrirArchivo(treeViewAbrir.SelectedNode.Text, treeViewAbrir.SelectedNode.Parent.Name);
                    this.Close();//se cierra la ventana
                }
            }
        }
    }
}
